#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

void sys(char *command)
{
    // 复制命令，因为 strtok 会修改原字符串
    char *cmd_copy = strdup(command);
    if (!cmd_copy) {
        perror("strdup");
        return;
    }

    // 分割命令为多个单词
    // 最多支持 100 个单词 + 1 个 NULL 结束
    char *words[101];
    int i = 0;
    char *tok = strtok(cmd_copy, " \t");
    while (tok && i < 100) {
        words[i++] = tok;
        tok = strtok(NULL, " \t");
    }
    words[i] = NULL;

    // 创建子进程执行命令
    pid_t pid = fork();
    if (pid < 0) {
        perror("fork");
    } else if (pid == 0) {
        // 子进程：执行命令
        execvp(words[0], words);
        // 如果 execvp 返回，说明出错
        perror("execvp");
        exit(EXIT_FAILURE);
    } else {
        // 父进程：等待子进程结束
        int status;
        if (waitpid(pid, &status, 0) < 0) {
            perror("waitpid");
        }
    }
    free(cmd_copy);
}

int main()
{
    /* 不要修改 main 函数 */
    puts("---");
    sys("echo HELLO WORLD");
    puts("---");
    sys("ls /");
    puts("---");
    return 0;
}
